[Auth0] 可変設定値をファイルで管理して複数テナントに同じ構成でデプロイする
こんにちは、CX事業本部の小林です。
Auth0ではテナントの設定値をyamlファイルにエクスポートしてコードで管理できます。
開発用・ステージング用・本番用など複数のテナントを管理している場合、各環境で可変となる設定値のみを記載したファイルを作成することで、各環境のテナントごとにエクスポートして別々に管理…ということをしなくて済みます。
本記事では、開発用と本番用の2つのテナントを例として複数テナントを効率良く管理する方法をご紹介します。
前提
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.6 BuildVersion: 19G2021 $ node -v v14.15.4 $ npm -v 6.14.10 $ yarn -v 1.22.10
準備
auth0-deploy-cli
をインストールします。
$ npm i -g auth0-deploy-cli $ a0deploy --version 5.5.0
Auth0のExtensionsでAuth0 Deploy CLIをインストールします。こちらの手順は以下の記事に記載がありますのでご参照ください。
各環境ごとに設定ファイルconfig.json
を作成します。今回は開発テナント用のconfig.dev.json
、本番テナント用のconfig.prd.json
を作成しました。
AUTH0_DOMAIN
とAUTH0_CLIENT_ID
は各環境のテナントの情報を記載します。
{ "AUTH0_DOMAIN": "hoge-dev.jp.auth0.com", "AUTH0_CLIENT_ID": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "AUTH0_ALLOW_DELETE": false }
{ "AUTH0_DOMAIN": "hoge-prd.jp.auth0.com", "AUTH0_CLIENT_ID": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "AUTH0_ALLOW_DELETE": false }
開発テナントの設定値をベースとするので、開発テナントの設定を以下のコマンドでエクスポートします。AUTH0_CLIENT_SECRET
はconfig.dev.json
に記載しても良いのですが秘密情報のため環境変数に設定して-x
オプションで読み込むようにしました。
export AUTH0_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxx a0deploy export -c config.dev.json -x ${AUTH0_CLIENT_SECRET} -f yaml -o tenants
エクスポートが完了すると、tenants
ディレクトリ配下に設定ファイル等のエクスポート結果が格納されます。tenant.yaml
にテナントの様々な設定値が記載されています。
$ tree -L 1 . ├── pages/ # Universal Loginをカスタマイズしたためhtmlファイルが出力されている └── tenant.yaml # テナント設定が一式されている
各環境ごとの設定値をconfig.jsonに記載する
AUTH0_KEYWORD_REPLACE_MAPPINGS
というプロパティ名のオブジェクト内に各環境ごとに可変となる設定値を記載します。
{ "AUTH0_DOMAIN": "hoge-dev.jp.auth0.com", "AUTH0_CLIENT_ID": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "AUTH0_ALLOW_DELETE": false, "AUTH0_KEYWORD_REPLACE_MAPPINGS": { // プロパティ名は自由 // 複数値の場合は配列で "APP_NAME": "hoge-spa-dev", "ALLOWED_URLS": ["http://localhost:3000", "http://localhost:4000"], "API_IDENTIFER": "https://api-dev.example.com" } }
{ "AUTH0_DOMAIN": "hoge-prd.jp.auth0.com", "AUTH0_CLIENT_ID": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "AUTH0_ALLOW_DELETE": false, "AUTH0_KEYWORD_REPLACE_MAPPINGS": { "APP_NAME": "hoge-spa-prd", "ALLOWED_URLS": ["http://hoge.example.com"], "API_IDENTIFER": "https://api-prd.example.com" } }
tenant.yamlの設定項目を変数化する
開発テナントからエクスポートしたtenant.yaml
を編集します。各環境ごとに可変となる設定値を、前述のconfig.${環境名}.json
内のAUTH0_KEYWORD_REPLACE_MAPPINGS
に記載したプロパティ名で置き換えます。
文字列を展開する場合は##プロパティ名##
または@@プロパティ名@@
と記載します。展開する値が配列またはオブジェクトの場合は@@プロパティ名@@
を使用します。
- name: '##APP_NAME##' allowed_clients: [] allowed_logout_urls: @@ALLOWED_URLS@@ allowed_origins: @@ALLOWED_URLS@@ app_type: spa callbacks: @@ALLOWED_URLS@@ client_aliases: [] cross_origin_auth: false custom_login_page_on: true
なお、環境変数の値も文字列と同様##環境変数名##
で展開されます。
# export ENV=dev - name: 'hoge-spa-##ENV##' allowed_clients: [] allowed_logout_urls: @@ALLOWED_URLS@@ allowed_origins: @@ALLOWED_URLS@@ app_type: spa callbacks: @@ALLOWED_URLS@@ client_aliases: [] cross_origin_auth: false custom_login_page_on: true
インポート
各環境ごとにENV
とAUTH0_CLIENT_SECRET
を環境変数にセットしてインポートします。
export ENV=dev export AUTH0_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxx a0deploy import -c config.${ENV}.json -x ${AUTH0_CLIENT_SECRET} -i tenants/tenant.yaml
export ENV=prd export AUTH0_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxx a0deploy import -c config.${ENV}.json -x ${AUTH0_CLIENT_SECRET} -i tenants/tenant.yaml
おわりに
可変設定値のみを記載したconfig.json
ファイルを作成すればエクスポートして管理するテナント設定ファイルが最小限となります。非常に便利なのでぜひ試してみてください。